package A一周刷爆LeetCode.A基础班.B认识复杂度和简单排序算法;

/**
 * @author wei.zhao
 * @description: 无序数组中，找出一个局部最小值
 * @date 2022年01月10日 16:37
 */
public class Code06_BSLocalMinimum {

    public static int localMinimum(int[] arr) {
        int min = -1;
        if (null == arr || arr.length < 2) {
            return min;
        }
        if (arr.length == 2) {
            return min = arr[0] < arr[1] ? arr[0] : arr[1];
        }
        if (arr[0] < arr[1]) {
            return arr[0];
        }
        if (arr[arr.length - 1] < arr[arr.length - 2]) {
            return arr[arr.length - 1];
        }
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            // 中间位置
            int mid = left + ((right - left) >> 1);
            if (arr[mid] < arr[mid - 1] && arr[mid] < arr[mid + 1]) {
                return arr[mid];
            } else if (arr[mid - 1] < arr[mid]) {
                right = mid;
            } else {
                left = mid;
            }
        }
        return min;
    }

}
